package gson.gson.cclass;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.TypeAdapter;
import com.google.gson.reflect.TypeToken;

/**
 * 封装 GSON 的常用方法
 */
public class GsonExample {

    private final Gson gson;

    public GsonExample() {
        this.gson = new GsonBuilder().create();
    }

    /**
     * 使用 fromJson 方法，将 JSON 字符串反序列化为指定类型的对象
     */
    public <T> T fromJson(String json, Class<T> classOfT) {
        return gson.fromJson(json, classOfT);
    }

    /**
     * 使用 fromJson 方法，通过 TypeToken 反序列化为泛型对象
     */
    public <T> T fromJson(String json, TypeToken<T> typeToken) {
        return gson.fromJson(json, typeToken.getType());
    }

    /**
     * 使用 toJson 方法，将对象序列化为 JSON 字符串
     */
    public String toJson(Object src) {
        return gson.toJson(src);
    }

    /**
     * 使用 toJsonTree 方法，将对象序列化为 JsonElement
     */
    public JsonElement toJsonTree(Object src) {
        return gson.toJsonTree(src);
    }

    /**
     * 获取特定类型的 TypeAdapter
     */
    public <T> TypeAdapter<T> getAdapter(Class<T> classOfT) {
        return gson.getAdapter(classOfT);
    }

}
